package ru.ifmo.cppsc.lexer.util;

import ru.ifmo.cppsc.lexer.token.Token;
import ru.ifmo.cppsc.lexer.token.TokenType;

/**
 *
 */
public class LexerHelper {

    public static String printToken(Token t) {
        StringBuffer sb = new StringBuffer();
        sb.append("<Token> :[");
        sb.append("type={");
        sb.append(t.getType().getName());
        sb.append("}, index={");
        sb.append(t.getIndex());
        sb.append("}, value={");
        sb.append(t.getValue());
        sb.append("}, line={");
        sb.append(t.getLineNumber());
        sb.append("}, symbol={");
        sb.append(t.getSymbol());
        sb.append("}];");

        if (t.getType() == TokenType.TVarDef) {
            sb.append("\n\t");
            Token tt = t.getVarType();
            sb.append("<Token:varType> :[");
            sb.append("type={");
            sb.append(tt.getType().getName());
            sb.append("}, index={");
            sb.append(tt.getIndex());
            sb.append("}, value={");
            sb.append(tt.getValue());
            sb.append("}, line={");
            sb.append(tt.getLineNumber());
            sb.append("}, symbol={");
            sb.append(tt.getSymbol());
            sb.append("}];\n\t");
            tt = t.getVarId();
            sb.append("<Token:varId> :[");
            sb.append("type={");
            sb.append(tt.getType().getName());
            sb.append("}, index={");
            sb.append(tt.getIndex());
            sb.append("}, value={");
            sb.append(tt.getValue());
            sb.append("}, line={");
            sb.append(tt.getLineNumber());
            sb.append("}, symbol={");
            sb.append(tt.getSymbol());
            sb.append("}];");
        } else if (t.getType() == TokenType.TGoto) {
            sb.append("\n\t");
            Token tt = t.getVarId();
            sb.append("<Token:varId> :[");
            sb.append("type={");
            sb.append(tt.getType().getName());
            sb.append("}, index={");
            sb.append(tt.getIndex());
            sb.append("}, value={");
            sb.append(tt.getValue());
            sb.append("}, line={");
            sb.append(tt.getLineNumber());
            sb.append("}, symbol={");
            sb.append(tt.getSymbol());
            sb.append("}];");
        }

        return sb.toString();

    }

}
